Java Technologies -
জাভা ভার্চুয়াল মেশিন (Java Virtual Machine)
JVM এর Garbage Collectors এর ধরণ |
202
202
Concurrent Mark-Sweep (CMS) হল Garbage Collection (GC) এর একটি প্রকার যা Java Virtual Machine (JVM)-এ মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। CMS একটি garbage collector যা মেমরি ব্যবস্থাপনা দ্রুত এবং কার্যকরীভাবে করতে সহায়তা করে, বিশেষ করে low-latency applications বা কম দেরিতে সাড়া দেওয়া অ্যাপ্লিকেশনগুলির জন্য। এটি JVM এর পুরানো Mark-Sweep garbage collection অ্যালগরিদমের একটি উন্নত সংস্করণ, যা মাল্টি-থ্রেডেড অপারেশনের মাধ্যমে garbage collection প্রক্রিয়া দ্রুত করে।
CMS Garbage Collector কী?
Concurrent Mark-Sweep (CMS) Garbage Collector একটি multi-threaded, concurrent গার্বেজ কलेकশন অ্যালগরিদম যা মেমরি পরিচালনা করার জন্য জাভার heap space (পুরানো এবং নতুন অঞ্চল) এর উপর কাজ করে। এর মূল উদ্দেশ্য হল pause time বা latency কমানো, যাতে interactive applications যেমন web servers, real-time applications, high-performance systems ইত্যাদি দ্রুত প্রতিক্রিয়া প্রদান করতে পারে।
CMS Garbage Collector এর মূল বৈশিষ্ট্য:
Concurrent Collection:
CMS কনকারেন্টলি গার্বেজ কোলেকশন প্রক্রিয়া পরিচালনা করে, অর্থাৎ এটি কিছু গার্বেজ কোলেকশন কার্যক্রম application threads এর সাথে একই সময়ে চালায়। এটি সাধারণভাবে সিস্টেমের ডাউনটাইম বা pause time কমাতে সাহায্য করে।
Low Pause Time:
CMS এর সবচেয়ে বড় সুবিধা হল এটি খুব কম সময়ের জন্য GC pause ঘটায়। এটি একাধিক থ্রেডের মাধ্যমে গার্বেজ কোলেকশন প্রক্রিয়া সম্পন্ন করে, যাতে অ্যাপ্লিকেশন থ্রেডের জন্য কম সময় ব্লক হয়।
Mark and Sweep Phases:
CMS মূলত Mark এবং Sweep ফেজ দুটি ব্যবহার করে:
Mark Phase: CMS প্রথমে সব অবজেক্ট শনাক্ত করে যেগুলি reachable (অর্থাৎ, যেগুলি এখনও অ্যাপ্লিকেশন কোড দ্বারা অ্যাক্সেস করা হচ্ছে) এবং যেগুলি unreachable (অর্থাৎ, যেগুলি অ্যাপ্লিকেশন কোড দ্বারা অ্যাক্সেস করা হচ্ছে না)।
Sweep Phase: তারপরে, unreachable অবজেক্টগুলিকে মুছে ফেলা হয় (গার্বেজ কোলেকশন করা হয়) এবং মুক্ত মেমরি তৈরি হয়।
Generational GC:
CMS পুরানো (old) এবং নতুন (young) মেমরি অঞ্চলে ভাগ করা heap space ব্যবহার করে। এই দুটি অঞ্চল আলাদা আলাদা করে কোলেকশন করে, যাতে young generation (যেখানে নতুন অবজেক্ট তৈরি হয়) দ্রুত গার্বেজ করা হয় এবং old generation (যেখানে দীর্ঘস্থায়ী অবজেক্ট থাকে) ধীরে ধীরে গার্বেজ করা হয়।
Incremental Collection:
CMS কার্যকরীভাবে incremental collection করে, যেখানে বড় গার্বেজ কোলেকশন সেশনের সময় ছোট ছোট অংশে তা বিভক্ত করা হয়। এটি কাজটি সমাপ্ত করতে বেশি সময় নিলেও pause time কম করে দেয়।
CMS Garbage Collector এর কাজের ধাপ:
CMS এর প্রক্রিয়া সাধারণত নিম্নলিখিত ধাপগুলিতে বিভক্ত করা হয়:
Initial Mark Phase:
এই ধাপে, CMS প্রথমে young generation এর ক্লাসগুলোকে চিহ্নিত করে এবং সেগুলিকে reachable হিসেবে মার্ক করে। এটা দ্রুত ঘটে, তবে এই পর্যায়ে কিছু ছোট pause time থাকতে পারে।
Concurrent Mark Phase:
এই পর্যায়ে CMS পুরো heap (অর্থাৎ young এবং old অঞ্চল) এর সমস্ত অবজেক্ট স্ক্যান করে এবং reachable অবজেক্টগুলো চিহ্নিত করে। এই প্রক্রিয়া মূল অ্যাপ্লিকেশন থ্রেডের সাথে কনকারেন্টলি চলে, তাই এটি মূল প্রোগ্রাম থ্রেডে ছোট pause time তৈরি করে।
Concurrent Pre-clean Phase:
যখন কনকারেন্ট মার্কিং চলতে থাকে, তখন কিছু সময়ের জন্য old generation এর অবজেক্টের জন্য গার্বেজ কোলেকশন করা শুরু হয় যাতে মেমরি দ্রুত মুছে ফেলা যায়।
Final Remark Phase:
এই পর্যায়ে, CMS একটি ছোট pause time নিয়ে অবশেষে reachable অবজেক্টগুলো চিহ্নিত করে এবং কোনো অবশিষ্ট গার্বেজ অবজেক্ট মুছে ফেলে।
Concurrent Sweep Phase:
এই ধাপে CMS সমস্ত unreachable অবজেক্ট মুছে ফেলে এবং তাদের মেমরি মুক্ত করে। এটি মূল প্রোগ্রাম থ্রেডের সাথে কনকারেন্টলি চলে।
Concurrent Reset Phase:
সমস্ত গার্বেজ কোলেকশন সেশনের শেষে, CMS গার্বেজের সমস্ত মেমরি এলাকা রিসেট করে এবং পরবর্তী গার্বেজ কোলেকশনের জন্য প্রস্তুতি নেয়।
CMS Garbage Collector এর সুবিধা:
Low Pause Time:
CMS GC প্রক্রিয়া কম pause time নিশ্চিত করে, যা real-time applications এবং interactive systems এর জন্য উপযুক্ত। এটি বিশেষভাবে ওয়েব সার্ভার, ডেটাবেস সার্ভার বা অন্যান্য লাইভ সিস্টেমে কার্যকরী।
Concurrent Execution:
CMS সাধারণত concurrent গার্বেজ কোলেকশন পরিচালনা করে, যেখানে গার্বেজ কোলেকশন এবং অ্যাপ্লিকেশন থ্রেড একসাথে কাজ করতে পারে, ফলে stop-the-world পজ পরিবর্তন কম হয়।
Non-Disruptive:
এটি JVM এর মেমরি ব্যবস্থাপনা প্রক্রিয়াতে একটি non-disruptive পদ্ধতি প্রদান করে, অর্থাৎ অ্যাপ্লিকেশন থ্রেডের কার্যক্রম প্রায় নষ্ট হয় না।
CMS Garbage Collector এর সীমাবদ্ধতা:
Full GC:
CMS এর একটি প্রধান সমস্যা হল এটি Full GC ঘটাতে পারে, বিশেষ করে যখন old generation এর heap space ভরে যায় এবং মেমরি ম্যানেজমেন্টে সমস্যা দেখা দেয়। Full GC চলাকালীন pause time অনেক বেড়ে যায়।
Fragmentation:
CMS মেমরি ফ্র্যাগমেন্টেশন তৈরি করতে পারে, বিশেষত যখন old generation এলাকা থেকে মেমরি খুবই ছোট ব্লক মুছে ফেলা হয় এবং এতে নতুন মেমরি বরাদ্দে সমস্যা দেখা দেয়।
Tuning Complexity:
CMS গার্বেজ কোলেক্টরের performance tuning কিছুটা জটিল হতে পারে, কারণ এটি বিভিন্ন ধরনের মেমরি এলাকা এবং concurrent phases পরিচালনা করে। এটি সঠিকভাবে কনফিগার না করলে, pause time সমস্যা হতে পারে।
CMS Garbage Collector ব্যবহার করার জন্য JVM অপশন:
যখন আপনি JVM এ CMS গার্বেজ কোলেক্টর ব্যবহার করতে চান, তখন কিছু নির্দিষ্ট JVM অপশন দিতে হয়:
-XX:+UseParNewGC: young generation এর জন্য parallel garbage collection চালু করা।
-Xms512m: JVM এর প্রাথমিক heap সাইজ।
-Xmx1024m: JVM এর সর্বোচ্চ heap সাইজ।
Concurrent Mark-Sweep (CMS) গার্বেজ কোলেক্টর একটি উন্নত গার্বেজ কোলেকশন পদ্ধতি যা কম pause time নিশ্চিত করে, যা real-time বা low-latency অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। এটি গার্বেজ কোলেকশন প্রক্রিয়া concurrent ও multi-threaded ভাবে পরিচালনা করে, তবে কিছু সীমাবদ্ধতা যেমন Full GC এবং fragmentation থাকতে পারে। CMS সঠিকভাবে কনফিগার করা হলে, এটি Java অ্যাপ্লিকেশনগুলির পারফরম্যান্স এবং প্রতিক্রিয়া সময়ে উল্লেখযোগ্য উন্নতি আনতে সক্ষম।